package basic.Serialize;

import java.io.Serializable;

//一、基本概念
//1、什么是序列化和反序列化
//
//        （1）Java序列化是指把Java对象转换为字节序列的过程，而Java反序列化是指把字节序列恢复为Java对象的过程；
//
//        （2）**序列化：**对象序列化的最主要的用处就是在传递和保存对象的时候，保证对象的完整性和可传递性。
//             序列化是把对象转换成有序字节流，以便在网络上传输或者保存在本地文件中。
//            序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。
//
//        （3）**反序列化：**客户端从文件中或网络上获得序列化后的对象字节流后，根据字节流中所保存的对象状态及描述信息，通过反序列化重建对象。
//
//        （4）本质上讲，序列化就是把实体对象状态按照一定的格式写入到有序字节流，反序列化就是从有序字节流重建对象，恢复对象状态。
//
//        2、为什么需要序列化与反序列化
//
//        我们知道，当两个进程进行远程通信时，可以相互发送各种类型的数据，包括文本、图片、音频、视频等， 而这些数据都会以二进制序列的形式在网络上传送。
//
//        那么当两个Java进程进行通信时，能否实现进程间的对象传送呢？答案是可以的！如何做到呢？这就需要Java序列化与反序列化了！
//
//        换句话说，一方面，发送方需要把这个Java对象转换为字节序列，然后在网络上传送；另一方面，接收方需要从字节序列中恢复出Java对象。
//
//        当我们明晰了为什么需要Java序列化和反序列化后，我们很自然地会想Java序列化的好处。
//        其好处一是实现了数据的持久化，通过序列化可以把数据永久地保存到硬盘上（通常存放在文件里），
//        二是，利用序列化实现远程通信，即在网络上传送对象的字节序列。
//
//        总的来说可以归结为以下几点：
//
//        （1）永久性保存对象，保存对象的字节序列到本地文件或者数据库中；
//        （2）通过序列化以字节流的形式使对象在网络中进行传递和接收；
//        （3）通过序列化在进程间传递对象；

//3、序列化算法一般会按步骤做如下事情：
//
//        （1）将对象实例相关的类元数据输出。
//        （2）递归地输出类的超类描述直到不再有超类。
//        （3）类元数据完了以后，开始从最顶层的超类开始输出对象实例的实际数据值。
//        （4）从上至下递归输出实例的数据

public class User implements Serializable {
    private String userName;
    private String password;
    private String sex;
    //全参构造方法、get和set方法省略
}
